package com.zrrd.jt_admin.shop.type.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zrrd.jt_admin.common.bo.GoodsTypeBo;
import com.zrrd.jt_admin.common.bo.SkusBo;
import com.zrrd.jt_admin.common.entity.GoodsType;
import com.zrrd.jt_admin.common.entity.GoodsTypeValue;
import com.zrrd.jt_admin.common.entity.Skus;
import com.zrrd.jt_admin.common.entity.SkusGoodsType;
import com.zrrd.jt_admin.common.vo.GoodsTypyVo;
import com.zrrd.jt_admin.shop.type.mapper.GoodsTypeMapper;
import com.zrrd.jt_admin.shop.type.service.GoodsTypeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zrrd.jt_admin.shop.type.service.GoodsTypeValueService;
import com.zrrd.jt_admin.shop.type.service.SkusGoodsTypeService;
import com.zrrd.jt_admin.shop.sku.service.SkusService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author Zhangyk
 * @since 2024-07-02
 */
@Service
public class GoodsTypeServiceImpl extends ServiceImpl<GoodsTypeMapper, GoodsType> implements GoodsTypeService {

    @Resource
    private GoodsTypeValueService goodsTypeValueService;

    @Resource
    private SkusGoodsTypeService skusGoodsTypeService;

    @Resource
    private SkusService skusService;

    @Override
    public GoodsTypyVo findByPage(Integer pageNo, Integer pageSize) {
        GoodsTypyVo goodsTypyVo = new GoodsTypyVo();
        PageHelper.startPage(pageNo, pageSize);
        List<GoodsType> goodsTypeList = this.list();
        PageInfo<GoodsType> pageInfo = new PageInfo<>(goodsTypeList);

        List<GoodsTypeBo> goodsTypeBoList = goodsTypeList.stream().map(goodsType -> {
            GoodsTypeBo goodsTypeBo = new GoodsTypeBo();
            BeanUtils.copyProperties(goodsType, goodsTypeBo);
            //goodsType对应的skusGoodsTypy
            List<SkusGoodsType> skusGoodsTypeList = skusGoodsTypeService.lambdaQuery()
                    .eq(SkusGoodsType::getGoodsTypeId, goodsType.getId())
                    .list();
            //获取skuBoList
            List<SkusBo> skusBoList = skusGoodsTypeList.stream().map(skusGoodsType -> {
                SkusBo skusBo = new SkusBo();
                Skus skus = skusService.lambdaQuery()
                        .eq(Skus::getId, skusGoodsType.getSkusId())
                        .one();
                BeanUtils.copyProperties(skus, skusBo);

                SkusGoodsType pivot = skusGoodsTypeService.lambdaQuery()
                        .eq(SkusGoodsType::getSkusId, skus.getId())
                        .eq(SkusGoodsType::getGoodsTypeId,goodsType.getId())
                        .one();
                skusBo.setPivot(pivot);

                return skusBo;
            }).collect(Collectors.toList());






            goodsTypeBo.setSkus(skusBoList);

            //goodsTypeValueList
            List<GoodsTypeValue> goodsTypeValueList = goodsTypeValueService.lambdaQuery()
                    .eq(GoodsTypeValue::getGoodsTypeId, goodsType.getId())
                    .list();

            goodsTypeBo.setGoodsTypeValues(goodsTypeValueList);
            return goodsTypeBo;
        }).collect(Collectors.toList());

        goodsTypyVo.setList(goodsTypeBoList);


        goodsTypyVo.setTotalCount(pageInfo.getTotal());
        return goodsTypyVo;
    }
}
